package com.atguigu.gmall.all.controller;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.product.BaseCategoryView;
import com.atguigu.gmall.product.client.ProductFeignClient;
import io.netty.handler.codec.json.JsonObjectDecoder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.Thymeleaf;
import org.thymeleaf.context.Context;

import java.io.*;
import java.sql.Wrapper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Author: 李旭
 * @Time: 15:21
 * @Description:
 *
 *   首页
 */
@Controller
public class IndexController {


    @Autowired
    private ProductFeignClient productFeignClient;
    // static /webapp/index.html
    // templates  WEB-INF/index/index.html
    //首页  https://www.jd.com/     www.gmall.com
    @GetMapping("/")
    public String index(Model model){

        model.addAttribute("list",getData());
        //首页
        return "index/index";
    }

    @Autowired
    private TemplateEngine templateEngine; //Thymeleaf  首页 == 模板
    //使用静态化程序生成首页  保存在指定的盘符下   盘符挂载到Nginx服务上去
    @GetMapping("/createHtml")
    @ResponseBody
    public Result createHtml() throws Exception{
        //首页的生成    数据 + 模板 == 输出流 （将页面保存指定磁盘上）
        //参数1：模板
        //参数2：数据
        Context context = new Context();
        context.setVariable("list",getData());
        //参数3：输出流 写
       // Writer writer = new OutputStreamWriter(
         //       new FileOutputStream("D:\\temp\\index.html"),"utf-8");

        Writer writer = new PrintWriter("D:\\temp\\index.html","utf-8");
        //静态化程序 读
        templateEngine.process("index/index",context,writer);
        return Result.ok();

        //流 ：  磁盘上文件 读取流 utf-8  --》  内存中  -->     写入流 utf-8 磁盘上
    }


    public List<Map> getData(){
        List<Map> listMap = new ArrayList<>();

        //所有分类
        List<BaseCategoryView> baseCategoryViewList =
                productFeignClient.getBaseCategoryViewList();
        //根据一级分类ID 进行分组 返回值 Map
        Map<Long, List<BaseCategoryView>> baseCategoryViewListMap = baseCategoryViewList.
                stream().collect(Collectors.groupingBy(BaseCategoryView::getCategory1Id));

        //1:前60个数据算一个Map
        baseCategoryViewListMap.forEach((k,v) -> {
            //一级分类
            Map category1Map = new HashMap();
            category1Map.put("index",k);
            category1Map.put("categoryId",k);
            category1Map.put("categoryName",v.get(0).getCategory1Name()); //V:  List<BaseCategoryView>

            //二级分类
            Map<Long, List<BaseCategoryView>> baseCategoryView2ListMap =
                    v.stream().collect(Collectors.groupingBy(BaseCategoryView::getCategory2Id));

            List<Map> listMap2 = new ArrayList<>();
            baseCategoryView2ListMap.forEach((k2,v2) -> {
                Map category2Map = new HashMap();
                category2Map.put("categoryId",k2);
                category2Map.put("categoryName",v2.get(0).getCategory2Name());
                //3:三级分类  V2: List<BaseCategoryView>
                List<Map> listMap3 = new ArrayList<>();
                v2.forEach(baseCategoryView -> {
                    Map category3Map = new HashMap();
                    category3Map.put("categoryId",baseCategoryView.getCategory3Id());
                    category3Map.put("categoryName",baseCategoryView.getCategory3Name());
                    listMap3.add(category3Map);
                });
                category2Map.put("categoryChild",listMap3);
                listMap2.add(category2Map);
            });
            category1Map.put("categoryChild",listMap2);
            listMap.add(category1Map);
        });
        return listMap;
    }
    // Velocity  Freemarker  Thymeleaf   静态化程序  页面模板标签   代码生成器

}
